There are two classes of applications that require keys to identify specific World Wide Web resources. First, some applications need to store a key for a particular web page that will allow the application to find that exact page at some point in the future. The second class of applications need to associate a key with a particular web page locally, in order that the same key can find the saved content at a future time. An example of the first class of applications is a web annotation system which needs to be able to generate a key to associate an annotation with the proper web resource being annotated. An example of the second class of application is a web proxy server, which needs to be able to generate a key from a web page as it stores the web page locally, and then generate the same key on subsequent requests for that resource in order to properly return the cached resource.
The natural solution to this problem is to use the URL of the web page as the key for that web page. URLs are strings divided into four components (<scheme>://<authority><path>?<query>), such as: